package com.serviportales.contactenos.managers;

import java.util.List;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.serviportales.contactenos.dao.MensajeDAO;
import com.serviportales.contactenos.exception.ContactenosException;
import com.serviportales.contactenos.model.Mensaje;
import com.serviportales.serviportales.exceptions.ServiportalesException;
import com.serviportales.serviportales.utils.BeansUtils;

@Service
@Transactional(rollbackFor = { ContactenosException.class })
public class MgrMensajes {
	@Autowired
	private MessageSource messageSource;

	@Autowired
	private MensajeDAO mensajeDAO;

	public void grabarMensaje(Mensaje mensaje) throws ContactenosException {
		try {
			if (mensaje.getScMensaje() != null) {
				Mensaje mensajeFilter = mensajeDAO.selectByID(mensaje.getScMensaje());
				BeanUtils.copyProperties(mensaje, mensajeFilter, new String[] { "scMensaje", "motivoContacto", "adjunto", "nombreAdjunto", "extensionAdjunto" });
				BeansUtils.validateBean(mensajeFilter, messageSource);
				mensajeDAO.update(mensajeFilter);
			} else {
				BeansUtils.validateBean(mensaje, messageSource);
				mensajeDAO.insert(mensaje);
			}
		} catch (ServiportalesException e) {
			throw new ContactenosException(e.getMessage());
		} catch (Exception exception) {
			throw new ContactenosException(messageSource.getMessage(ContactenosException.GRABAR_ERROR, new String[] { exception.getMessage() }, LocaleContextHolder.getLocale()), exception);
		}
	}

	public List<Mensaje> buscarMensajes(Mensaje mensaje) throws ContactenosException {
		try {
			return mensajeDAO.selectMensajesNotLobs(mensaje);
		} catch (Exception exception) {
			throw new ContactenosException(messageSource.getMessage(ContactenosException.BUSCAR_ERROR, new String[] { exception.getMessage() }, LocaleContextHolder.getLocale()), exception);
		}
	}

	public List<Mensaje> buscarMensajes(Mensaje mensaje, int maxResult) throws ContactenosException {
		try {
			return mensajeDAO.select(mensaje, 0, maxResult);
		} catch (Exception exception) {
			throw new ContactenosException(messageSource.getMessage(ContactenosException.BUSCAR_ERROR, new String[] { exception.getMessage() }, LocaleContextHolder.getLocale()), exception);
		}
	}

	public Mensaje buscarMensaje(Long scMensaje) throws ContactenosException {
		try {
			return mensajeDAO.selectByID(scMensaje);
		} catch (Exception exception) {
			throw new ContactenosException(messageSource.getMessage(ContactenosException.BUSCAR_ERROR, new String[] { exception.getMessage() }, LocaleContextHolder.getLocale()), exception);
		}
	}
}
